#pragma once

namespace Caelum {

#ifdef _WIN32
const wchar_t OS_LINE_ENDING[] = L"\n";
#elif __APPLE__
const wchar_t OS_LINE_ENDING[] = L"\r";
#else
const wchar_t OS_LINE_ENDING[] = L"\n";
#endif

//These are coincidentally almost exactly the same as Ogre's version definitions. Curious. :P
#define CAELUM_VERSION_MAJOR 1
#define CAELUM_VERSION_MINOR 0
#define CAELUM_VERSION_PATCH 0
#define CAELUM_VERSION_SUFFIX L""
#define CAELUM_VERSION_NAME L"Constellation"

#define CAELUM_VERSION ((CAELUM_VERSION_MAJOR << 16) | (CAELUM_VERSION_MINOR << 8) | CAELUM_VERSION_PATCH)

//Predeclare all the classes in Caelum so there's no need to individually include each header
class BaseEventArgs;
class BaseException;
class Client;
class FrameEventArgs;
class Image;
class Logger;
class RenderTarget;
class RenderWindow;
class Vector3;
class Viewport;
class Window;

namespace ModelData {

class OBJProcessor;

}

typedef unsigned int uint;
typedef unsigned char uchar;
typedef unsigned char byte;

//Uncomment the next line to enable the use of double datatypes
//rather than float. Or just define CAELUM_DOUBLE_PRECISION when compiling.

//#define CAELUM_DOUBLE_PRECISION

#ifdef CAELUM_DOUBLE_PRECISION
typedef double real;
#else
typedef float real;
#endif


}